﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Gestión_UTN.View.general
{
    public partial class Materias : Form
    {
        private static Gestión_UTN.bl.materiabl createMateria = Gestión_UTN.factories.blfactory.createMateria();
        private static DataTable materias = null;
        private static bo.Materiabo m = new bo.Materiabo(0, "", "");

        public Materias()
        {
            InitializeComponent();
        }

        private void Materias_Load(object sender, EventArgs e)
        {
            materias = createMateria.FindAllMaterias();

            if (null != materias && materias.Rows.Count > 0)
            {
                foreach (DataRow dr in materias.Rows)
                {
                    this.dgvMaterias.Rows.Add(dr[1].ToString(), dr[2].ToString());
                }
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgvMaterias.CurrentRow.Cells[0].Value != null)
                {
                    int id = 0;

                    if (null != materias && materias.Rows.Count > 0)
                    {
                        string filtro = "mat_nombre = '" + this.dgvMaterias.CurrentRow.Cells[0].Value.ToString()
                                        + "' AND car_nombre = '" + this.dgvMaterias.CurrentRow.Cells[1].Value.ToString() + "' ";

                        DataRow[] dr = materias.Select(filtro);

                        id = (null != dr && dr.Length > 0) ? Convert.ToInt32(dr[0]["mat_id"].ToString()) : 0;
                    }

                    if (0 == id)
                    {
                        bo.Materiabo mat = new bo.Materiabo(0, this.dgvMaterias.CurrentRow.Cells[0].Value.ToString(),
                            this.dgvMaterias.CurrentRow.Cells[1].Value.ToString());

                        bool ingresada = createMateria.SaveMateria(mat);

                        if (ingresada)
                        {
                            MessageBox.Show("Materia Ingresada!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            refreshDgv();
                        }
                        else
                        {
                            MessageBox.Show("Error al Ingresar!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Materia Existente!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            catch (exceptions.blexception)
            {
                MessageBox.Show("Error al Intentar Guardar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al Intentar Guardar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Gestión_UTN.util.EscribirLog.escribirArchivo(ex.Message);
            }

        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgvMaterias.CurrentRow.Cells[0].Value != null)
                {
                    bo.Materiabo mat = new bo.Materiabo(0, this.dgvMaterias.CurrentRow.Cells[0].Value.ToString(),
                            this.dgvMaterias.CurrentRow.Cells[1].Value.ToString());

                    bool modificada = createMateria.ModifyMateria(m, mat);

                    if (modificada)
                    {
                        MessageBox.Show("Materia Modificada!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        refreshDgv();

                    }
                    else
                    {
                        MessageBox.Show("Error al Modificar!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            catch (exceptions.blexception)
            {
                MessageBox.Show("Error al Intentar Modificar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al Intentar Modificar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Gestión_UTN.util.EscribirLog.escribirArchivo(ex.Message);
            }
        }

        private void dgvMaterias_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            m.Nombre = (this.dgvMaterias.CurrentRow.Cells[0].Value != null)
                         ? this.dgvMaterias.CurrentRow.Cells[0].Value.ToString()
                         : "";

            m.Carrera = (this.dgvMaterias.CurrentRow.Cells[1].Value != null)
                ? this.dgvMaterias.CurrentRow.Cells[1].Value.ToString()
                : "";

        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgvMaterias.CurrentRow.Cells[0].Value != null)
                {
                    bo.Materiabo mat = new bo.Materiabo(0, this.dgvMaterias.CurrentRow.Cells[0].Value.ToString(),
                            this.dgvMaterias.CurrentRow.Cells[1].Value.ToString());

                    bool eliminada = createMateria.DeleteMateria(mat);

                    if (eliminada)
                    {
                        MessageBox.Show("Materia Eliminada!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        refreshDgv();
                    }
                    else
                    {
                        MessageBox.Show("Error al Eliminar!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            catch (exceptions.blexception)
            {
                MessageBox.Show("Error al Intentar Eliminar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al Intentar Eliminar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Gestión_UTN.util.EscribirLog.escribirArchivo(ex.Message);
            }
        }

        private void refreshDgv()
        {
            materias = createMateria.FindAllMaterias();

            if (null != materias && materias.Rows.Count > 0)
            {
                this.dgvMaterias.Rows.Clear();

                foreach (DataRow dr in materias.Rows)
                {
                    this.dgvMaterias.Rows.Add(dr[1].ToString(), dr[2].ToString());
                }
            }
        }
    }
}
